#include <string>
#include <aki/jsbind.h>

// C++函数，模拟获取文件列表
std::vector<std::string> GetFileList(std::string dirName) {
    return {
        "document.txt",
        "image.jpg", 
        "data.csv",
        "report.pdf",
        "backup.zip"
    };
}

// 注册全局函数， 相当于：
/*EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
    napi_property_descriptor desc[] = {
        { "getFileList", nullptr, GetFileList, nullptr, nullptr, nullptr, napi_default, nullptr }
    };
    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
    return exports;
}
EXTERN_C_END*/
JSBIND_GLOBAL() {
    // 把C++函数和ArkTs函数绑定
    JSBIND_FUNCTION(GetFileList, "getFileList");
}

// JSBIND_ADDON(entry)：绑定插件，entry是cpp/types/CMakeLists.txt中add_library(entry SHARED hello.cpp)定义的entry
// 这行代码一句话等于：
/*
// 这是一个napi_module类型的静态变量，用于描述模块信息
static napi_module entryModule = {
    .nm_version = 1,            // N-API模块版本，这里为1
    .nm_flags = 0,              // 模块标志，0表示没有特殊标志
    .nm_filename = nullptr,     // 模块文件名，这里为nullptr，表示使用默认文件名
    .nm_register_func = Init,   // 模块注册函数，这里指定为Init函数
    .nm_modname = "entry",      // 模块名，这里为"entry"，在ArkTS中导入模块时使用
    .nm_priv = ((void*)0),      // 私有数据，这里为nullptr
    .reserved = { 0 },          // 保留字段，初始化为0
};

// 模块注册函数
extern "C" __attribute__((constructor)) void RegisterEntryModule(void)
{
    napi_module_register(&entryModule);
}
*/
// 绑定模块，注册 AKI 插件名: 即为编译*.so名称，规则与NAPI一致
JSBIND_ADDON(entry)

